字符指针问题 [续]

来源:百度知道 编辑:UC知道 时间:2024/05/18 21:57:28
#include <stdio.h>
void fun(char **p)
{++p;printf("%s\n",*p);}
main()
{char *a[]=("Morning","Afternonn","night");
fun(a);
}
这里为什么会是输出Afternoon 而不是orning 之前在http://zhidao.baidu.com/question/68240206.html
这里的p指向的是"abc"的首地址 本人大白 = =~!

首先是调试了的程序如下!当你把++p去掉之后就会输出Morning的
因为++p的意思它的指针位置向下移动了一个单位,也就是指在了a[1],所以是第二个字符串的位置了!或者是指针数组里的第二个指针!
#include <stdio.h>
void fun(char **p)
{++p;printf("%s\n",*p);}
void main()
{char *a[]={"Morning","Afternonn","night"};
fun(a);
}

char **p; 这是一个指向字符指针的变量!如果是这样 *p你知道是指向字符的指针,那么它存的是所指向字符变量的地址!比如char *p=str,那么p存的就是str的地址!所以char s,*q=&s,**p=&q;这样就明白了吧, **p存的是字符指针的地址!
直接用*str的错误在哪?看你怎么用,如果直接替换的话,主要是增加了程序的复杂度,不易读,这样简单点!不然还有来会的把空格后面的字符移动到前面,但是并不是不可以!!!还有考虑指针的来回移动问题

弄好了!希望多给点分!
#include <stdio.h>
void fun(char *str)
{
int i=0,t,j=0;
while (*str!='\0')
{ i++;
str++;
}
*str='\0';
j=i;
while(i)
{--str;
i--;
}

for(i=0;i<j;i++)
{
if(str[i]==' ')
{t=i;
for(t;t<j;t++)
str[t]=str[t+1];
i--;
}
}
printf(&q